#include "gtkmenu.h"
#include "gtkmenuitem.h"
#include "gtkmenushell.h"
-#include "gtkpressandholdprivate.h"
#include "gtkprivate.h"
#include "gtkintl.h"
#include "a11y/gtkcolorswatchaccessibleprivate.h"
GdkWindow *event_window;
- GtkPressAndHold *press_and_hold;
+ GtkGesture *long_press_gesture;
+ GtkGesture *multipress_gesture;
};
enum
static guint signals[LAST_SIGNAL];
+static void hold_action (GtkGestureLongPress *gesture,
+ gdouble x,
+ gdouble y,
+ GtkColorSwatch *swatch);
+static void tap_action (GtkGestureMultiPress *gesture,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ GtkColorSwatch *swatch);
+
G_DEFINE_TYPE_WITH_PRIVATE (GtkColorSwatch, gtk_color_swatch, GTK_TYPE_WIDGET)
static void
gtk_widget_set_can_focus (GTK_WIDGET (swatch), TRUE);
gtk_widget_set_has_window (GTK_WIDGET (swatch), FALSE);
+
+ swatch->priv->long_press_gesture = gtk_gesture_long_press_new (GTK_WIDGET (swatch));
+ g_signal_connect (swatch->priv->long_press_gesture, "pressed",
+ G_CALLBACK (hold_action), swatch);
+ gtk_widget_add_controller (GTK_WIDGET (swatch),
+ GTK_EVENT_CONTROLLER (swatch->priv->long_press_gesture));
+
+ swatch->priv->multipress_gesture = gtk_gesture_multi_press_new (GTK_WIDGET (swatch));
+ g_signal_connect (swatch->priv->multipress_gesture, "pressed",
+ G_CALLBACK (tap_action), swatch);
+ gtk_widget_add_controller (GTK_WIDGET (swatch),
+ GTK_EVENT_CONTROLLER (swatch->priv->multipress_gesture));
}
#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11)
}
static void
-hold_action (GtkPressAndHold *pah,
- gint x,
- gint y,
- GtkColorSwatch *swatch)
+hold_action (GtkGestureLongPress *gesture,
+ gdouble x,
+ gdouble y,
+ GtkColorSwatch *swatch)
{
emit_customize (swatch);
+ gtk_gesture_set_state (GTK_GESTURE (gesture), GTK_EVENT_SEQUENCE_CLAIMED);
}
static void
-tap_action (GtkPressAndHold *pah,
- gint x,
- gint y,
- GtkColorSwatch *swatch)
-{
- swatch_primary_action (swatch);
-}
-
-static gboolean
-swatch_touch (GtkWidget *widget,
- GdkEventTouch *event)
+tap_action (GtkGestureMultiPress *gesture,
+ gint n_press,
+ gdouble x,
+ gdouble y,
+ GtkColorSwatch *swatch)
{
- GtkColorSwatch *swatch = GTK_COLOR_SWATCH (widget);
-
- if (!swatch->priv->press_and_hold)
- {
- gint drag_threshold;
-
- g_object_get (gtk_widget_get_settings (widget),
- "gtk-dnd-drag-threshold", &drag_threshold,
- NULL);
-
- swatch->priv->press_and_hold = gtk_press_and_hold_new ();
-
- g_object_set (swatch->priv->press_and_hold,
- "drag-threshold", drag_threshold,
- "hold-time", 1000,
- NULL);
-
- g_signal_connect (swatch->priv->press_and_hold, "hold",
- G_CALLBACK (hold_action), swatch);
- g_signal_connect (swatch->priv->press_and_hold, "tap",
- G_CALLBACK (tap_action), swatch);
- }
-
- gtk_press_and_hold_process_event (swatch->priv->press_and_hold, (GdkEvent *)event);
-
- return TRUE;
+ if (n_press == 1)
+ swatch_primary_action (swatch);
}
static void
GtkColorSwatch *swatch = GTK_COLOR_SWATCH (object);
g_free (swatch->priv->icon);
- g_clear_object (&swatch->priv->press_and_hold);
+
+ gtk_widget_remove_controller (GTK_WIDGET (object),
+ GTK_EVENT_CONTROLLER (swatch->priv->long_press_gesture));
+ g_object_unref (swatch->priv->long_press_gesture);
+
+ gtk_widget_remove_controller (GTK_WIDGET (object),
+ GTK_EVENT_CONTROLLER (swatch->priv->multipress_gesture));
+ g_object_unref (swatch->priv->multipress_gesture);
G_OBJECT_CLASS (gtk_color_swatch_parent_class)->finalize (object);
}
widget_class->map = swatch_map;
widget_class->unmap = swatch_unmap;
widget_class->size_allocate = swatch_size_allocate;
- widget_class->touch_event = swatch_touch;
signals[ACTIVATE] =
g_signal_new ("activate",